#ifndef __DATA_GLOBAL__H__
#define __DATA_GLOBAL__H__


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <signal.h>
#include <pthread.h>
#include <termios.h>
#include <syscall.h>

#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/msg.h>
#include <sys/sem.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <linux/fs.h>
#include <linux/ioctl.h>
#include <stdint.h>
#include <unistd.h>
#include <errno.h>
#include <linux/input.h>


/*********************************************************
  data_global.h : 
    1. 全局的宏、全局的设备节点声明
    2. 全局的共享内存结构体构造信息(数据上传)
    3. 全局的函数声明
    4. 全局的消息队列传递的结构体构造信息（数据下发）
 *********************************************************/


/*********************************************************
  1. 全局的宏、全局的设备节点声明
 *********************************************************/
#define MONITOR_NUM   1
#define QUEUE_MSG_LEN  32

#define		GPRS_DEV   			 "/dev/ttyUSB0"
#define		ZIGBEE_DEV 		     "/dev/ttyUSB1"
#define		BEEPER_DEV 		     "/dev/fsbeeper0"
#define		LED_DEV    			 "/dev/fsled0"


/*********************************************************
  2. 全局的共享内存结构体构造信息(数据上传)
 *********************************************************/
typedef  unsigned char  uint8_t;
typedef  unsigned short uint16_t;
typedef  unsigned int   uint32_t;

//考虑到内存对齐的问题
struct makeru_zigbee_info{
    //标识位: 'm' 's' 'm'  makeru-security-monitor  
	uint8_t head[3];
    //数据类型  'z'---zigbee  'a'---a9 
	uint8_t type;
    //温度
	float temperature;
    //湿度
	float humidity;  
    //温度下限
	float tempMIN;
    //温度上限 
	float tempMAX;
    //湿度下限
	float humidityMIN;
    //湿度上限
	float humidityMAX;
    //保留扩展位，默认填充0
	uint32_t reserved[2]; 
};

struct makeru_a9_info{
    //标识位: 'm' 's' 'm'  makeru-security-monitor  
	uint8_t head[3];
    //数据类型  'z'---zigbee  'a'---a9
	uint8_t type;	 
	float adc;
    //陀螺仪数据
	short gyrox;   
	short gyroy;
	short gyroz;
    //加速计数据
	short aacx;  
	short aacy;
	short aacz;
    //保留扩展位，默认填充0
	uint32_t reserved[2]; 
};

struct makeru_env_data{
	struct makeru_a9_info       a9_info;    
	struct makeru_zigbee_info   zigbee_info;
    //保留扩展位，默认填充0
	uint32_t reserved[2]; 
};

//所有监控区域的信息结构体
struct env_info_client_addr
{
    //数组  老家---新家
	struct makeru_env_data  monitor_no[MONITOR_NUM];	
};


/*********************************************************
  3. 全局的函数声明
 *********************************************************/
//接收CGI 等的请求
void *pthread_client_request (void *arg);
//刷新共享内存数据线程
void *pthread_refresh(void *arg);
//数据库线程，保存数据库的数据              
void *pthread_sqlite(void *arg);
//接收ZigBee的数据并解析                 
void *pthread_transfer(void *arg); 
//发送短信线程          
void *pthread_sms(void *arg);
//蜂鸣器控制线程                
void *pthread_buzzer(void *arg);
//led灯控制线程          
void *pthread_led(void *arg);                 
//消息队列发送函数
int send_msg_queue(long type,unsigned char text);


/*********************************************************
  4. 全局的消息队列传递的结构体构造信息（数据下发）
 *********************************************************/
struct msg
{
    //从消息队列接收消息时用于判断的消息类型
	long type;
    //具体的消息类型
	long msgtype;
    //消息正文
	unsigned char text[QUEUE_MSG_LEN];
};


#endif 


